Je déconne avec JSON depuis un certain temps, je ne fais que le publier sous forme de texte et cela n'a fait de mal à personne (à ma connaissance), mais j'aimerais commencer à faire les choses correctement. J'ai vu tant de prétendus "standards" pour le type de contenu JSON: application / json application / x-javascript texte / javascript texte / x-javascript texte / x-json Mais lequel est correct ou meilleur? Je suppose qu'il existe des problèmes de sécurité et de prise en charge du navigateur qui varient entre eux. Je sais qu'il y a une question similaire, quel type MIME si JSON est renvoyé par une API REST?, Mais j'aimerais une réponse un peu plus ciblée.
2020-12-07 21:17:02
1 2 Prochain Pour le texte JSON: application / json Le type de média MIME pour le texte JSON est application / json. Le codage par défaut est UTF-8. (Source: RFC 4627). Pour JSONP (JavaScript exécutable) avec rappel: application / javascript Voici quelques articles de blog qui ont été mentionnés dans les commentaires pertinents: Pourquoi vous ne devriez pas utiliser text / html pour JSON Internet Explorer a parfois des problèmes avec application / json Une liste assez complète de Mimetypes et à quoi les utiliser La liste officielle des types de mime à l'IANA à partir de la réponse de @ gnrfan ci-dessous | L'IANA a enregistré le type MIME officiel pour JSON en tant qu'application / json. Lorsqu'on lui a demandé pourquoi pas text / json, Crockford semble avoir dit que JSON n'était pas vraiment du JavaScript ni du texte et que l'IANA était plus susceptible de distribuer l'application / * que le texte / *. Plus de ressources: Types de médias Demande de commentaires 4627 bluesmoon: JSON a un type | Pour JSON: Content-Type: application / json Pour JSON-P: Type de contenu: application / javascript | Bien sûr, le type de support MIME correct pour JSON est application / json, mais il est nécessaire de savoir quel type de données est attendu dans votre application. Par exemple, j'utilise Ext GWT et la réponse du serveur doit être sous forme de texte / html mais contient des données JSON. Côté client, écouteur de formulaire Ext GWT uploadForm.getForm (). addListener (nouveau FormListenerAdapter () { @Passer outre public void onActionFailed (Form form, int httpStatus, String responseText) { MessageBox.alert ("Erreur"); } @Passer outre public void onActionComplete (Form form, int httpStatus, String responseText) { MessageBox.alert ("Succès"); } }); En cas d'utilisation du type de réponse application / json, le navigateur me propose d'enregistrer le fichier. Extrait de code source côté serveur utilisant Spring MVC retourne un nouveau AbstractUrlBasedView () { @SuppressWarnings ("non coché") @Passer outre protected void renderMergedOutputModel (modèle de carte, requête HttpServletRequest, HttpServletResponse) lève une exception { response.setContentType ("texte / html"); response.getWriter (). write (json); } }; | JSON: La réponse est des données générées dynamiquement, en fonction des paramètres de requête transmis dans l'URL. Exemple: {"Name": "Foo", "Id": 1234, "Rank": 7} Content-Type: application / json JSON-P: JSON avec rembourrage. La réponse est constituée de données JSON, avec un appel de fonction enveloppé. Exemple: functionCall ({"Nom": "Foo", "Id": 1234, "Rank": 7}); Type de contenu: application / javascript | Si vous utilisez Ubuntu ou Debian et que vous servez des fichiers .json via Apache, vous souhaiterez peut-être servir les fichiers avec le type de contenu correct. Je fais cela principalement parce que je veux utiliser l'extension Firefox JSONView Le module Apache mod_mime vous aidera à le faire facilement. Cependant, avec Ubuntu, vous devez éditer le fichier /etc/mime.types et ajouter la ligne application / json json Puis redémarrez Apache: redémarrage du service sudo apache2 | Si vous appelez les services Web ASP.NET du côté client, vous devez utiliser application / json pour que cela fonctionne. Je pense que c'est la même chose pour les frameworks jQuery et Ext. | Le bon type de contenu pour JSON est application / json À MOINS QUE vous n'utilisiez JSONP, également connu sous le nom de JSON avec remplissage, qui est en fait JavaScript et donc le bon type de contenu serait application / javascript. | Il ne fait aucun doute que application / json est le meilleur type MIME pour une réponse JSON. Mais j'ai eu une certaine expérience où j'ai dû utiliser application / x-javascript en raison de problèmes de compression. Mon environnement d'hébergement est un hébergement partagé avec GoDaddy. Ils ne me permettent pas de modifier les configurations de serveur. J'avais ajouté le code suivant à mon fichier web.config pour compresser les réponses.En utilisant cela, les pages .aspx ont été compressées avec g-zip, mais les réponses JSON ne l'ont pas été. J'ai ajouté dans les sections types statiques et dynamiques. Mais cela ne compresse pas du tout les réponses JSON. Après cela, j'ai supprimé ce type nouvellement ajouté et ajouté dans les sections des types statiques et dynamiques, et a changé le type de réponse dans .ashx (gestionnaire asynchrone) à application / x-javascript Et maintenant, j'ai trouvé que mes réponses JSON étaient compressées avec g-zip. Je recommande donc personnellement d'utiliser application / x-javascript uniquement si vous souhaitez compresser vos réponses JSON sur un environnement d'hébergement partagé. Parce que dans l'hébergement mutualisé, ils ne vous permettent pas de changer IISconfigurations. | Uniquement lorsque j'utilise application / json comme type MIME, j'ai les éléments suivants (à partir de novembre 2011 avec les versions les plus récentes de Chrome, Firefox avec Firebug): Plus d'avertissements de Chrome lorsque le JSON est chargé à partir du serveur. Firebug ajoutera un onglet à la réponse vous montrant les données JSON formaté. Si le type MIME est différent, il apparaîtra simplement comme «Contenu de la réponse». | Tout ne fonctionne pas pour le type de contenu application / json. Si vous utilisez la soumission de formulaire Ext JS pour télécharger le fichier, sachez que la réponse du serveur est analysée par le navigateur pour créer le document pour le